package com.hsnn.medstgmini.settlement.dao;

import java.util.List;
import java.util.Map;

import com.hsnn.medstgmini.settlement.model.SetAcctInfo;
import com.hsnn.medstgmini.settlement.model.SetBankAcctInfo;
import com.hsnn.medstgmini.settlement.model.SetBankArea;
import com.hsnn.medstgmini.settlement.model.SetBankInfo;
import com.hsnn.medstgmini.settlement.model.form.BankAcct;
import com.hsnn.medstgmini.settlement.model.form.BankAcctLog;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 帐户、银行卡管理
 * @author 蔡春龙
 * @date 2015年7月21日
 */
public interface BankAcctInfoDao {

	/**
	 * @category 获取帐户信息
	 * @date 2015年7月21日
	 * @param user当前登陆人
	 * @return
	 */
	SetAcctInfo getAcctInfo(SysUser user);

	/**
	 * @category 根据id查询帐户信息
	 * @date 2015年7月23日
	 * @param orgId
	 * @return
	 */
	SetAcctInfo getAcctInfoById(String orgId);

	/**
	 * @category 获取开户行
	 * @date 2015年7月21日
	 * @return
	 */
	List<Map<String, String>> getBankList();

	/**
	 * @category 查询银行卡列表
	 * @date 2015年7月21日
	 * @param page翻页参数
	 * @param bankAcct查询参数
	 * @param user登陆人
	 * @return
	 */
	Pagination getBankAcctInfoList(Pagination page, SetBankAcctInfo bankAcct,
			SysUser user);

	/**
	 * @category 根据帐户id查询银行卡列表
	 * @date 2015年7月21日
	 * @param page翻页参数
	 * @param bankAcct查询参数
	 * @return
	 */
	Pagination getBankAcctInfoList(Pagination page, SetBankAcctInfo bankAcct);

	/**
	 * @category 查询银行支行列表
	 * @date 2015年7月21日
	 * @param page翻页参数
	 * @param bankAcct查询参数
	 * @param user登陆人
	 * @return
	 */
	Pagination getSubBankAcctInfoList(Pagination page, SetBankInfo bankInfo);

	/**
	 * @category 查询银行地区列表
	 * @date 2015年7月22日
	 * @param bankArea
	 * @return
	 */
	List<SetBankArea> getBankAreaList(SetBankArea bankArea);

	/**
	 * @category 保存银行帐户信息
	 * @date 2015年7月22日
	 * @param bankAcct
	 * @param user
	 */
	void saveBankAcctInfo(SetBankAcctInfo bankAcct, SysUser user);

	/**
	 * @category 保存银行帐户审核信息
	 * @date 2015年7月22日
	 * @param bankAcct
	 * @param user
	 */
	void saveAuditBankAcctInfo(SetBankAcctInfo bankAcct, SysUser user);
	
	/**
	 * @category 中心、卫生局编辑银行帐户信息
	 * @date 2015年7月22日
	 * @param bankAcct
	 * @param user
	 */
	void saveBankAcctInfoByCenter(SetBankAcctInfo bankAcct, SysUser user);

	/**
	 * @category 中心根据orgType查询帐户列表
	 * @date 2015年7月22日
	 * @param acctInfo
	 *            (orgType参考UserType枚举)
	 * @return
	 */
	Pagination getAcctInfoList(SetAcctInfo acctInfo, Pagination page);

	/**
	 * @category 根据银行帐户id查询
	 * @date 2015年7月22日
	 * @param bankAcctId
	 * @return
	 */
	SetBankAcctInfo getBankAcctById(String bankAcctId);

	/**
	 * @category 查询银行卡日志
	 * @date 2015年7月23日
	 * @param bankAcctLog
	 * @param page
	 * @return
	 */
	Pagination getBankAcctLogList(BankAcctLog bankAcctLog, Pagination page);

	/**
	 * @category 查询核算中心能审核的医疗机构账户列表
	 * @date 2015年7月24日
	 * @param acctInfo
	 * @param user
	 * @return
	 */
	Pagination getAuditHospAcctList(SetAcctInfo acctInfo, SysUser user,
			Pagination page);

	
	/**
	 * @category 根据银行账户的id及当前用户设置默认账户
	 * @author 韩守松
	 * @date   2015年7月27日
	 * @param  @param page
	 * @param  @param setBankAcctInfo
	 */
	void setDefaultAcctInfoById(Pagination page,SetBankAcctInfo setBankAcctInfo,SysUser user);
	
	/**
	 * @category 核算中心查询医疗机构审核列表
	 * @date 2015年7月30日
	 * @param bankAcct
	 * @param page
	 * @param user
	 * @return
	 */
	Pagination getAuditHospAcctInfoList(BankAcct bankAcct, Pagination page,
			SysUser user);
	
	/**
	 * @category 中心查询医疗机构、配送企业审核列表
	 * @date 2015年7月30日
	 * @param bankAcct
	 * @param page
	 * @return
	 */
	Pagination getAuditAcctInfoList(BankAcct bankAcct, Pagination page);
	
	/**
	 * @category 校验银行卡号是否存在
	 * @date 2015年8月11日
	 * @param bankAcct
	 * @return
	 */
	boolean checkSameBankAcctNo(SetBankAcctInfo bankAcct);
	
	/**
	 * @category 中心查询医疗机构
	 * @date 2015年8月12日13:22:20
	 * @author 应晓川
	 * @param Pagination page
	 * @return
	 */
	Pagination getAcctInfoList(Pagination page);
}